#!/bin/sh
#
# hangoutsbot        Startup script for Hangoutsbot
#
# chkconfig: - 80 20
# description: Enable service provided by hangoutsbot chat bot
# processname: python3.5
# config: /etc/hangoutsbot/config.json
# pidfile: /var/run/hangoutsbot.pid
#
### BEGIN INIT INFO
# Provides:          hangoutsbot
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Short-Description: Start hangoutsbot
# Description:       Enable service provided by hangoutsbot chat bot
### END INIT INFO

## RHEL (CentOS, Fedora) daemon for hangoutsbot chat bot
# @author uryossa <twitter.com/uryossa>
#   Please remove the "Author" lines above and replace them
#   with your own name if you copy and modify this script.
#
# This init.d script allows you to start hangoutsbot automatically when your  (or other similar linux
# system) starts. This script has been written for and tested on CentOS6 but it should be trivial to
# modify for other Debian based systems. In order to set up the script, a few steps must be taken in advance:
#
# 1. Run hangoutsbot manually at least once to set up your authorization token
# 2. Move your configuration, cookies and memory files to /etc/hangoutsbot/ or alter the script below to point to where
#    they are.
# 3. The script assumes that hangoutsbot is checked out to /home/hangoutsbot/, if that isn't the case, edit the
#    script below. It also assumes that Python3 is in /usr/bin/python3.5 (ius yum repo), if your system is different, edit the
#    DAEMON variable in the script below.
# 4. Copy this script to /etc/rc.d/init.d/hangoutsbot (as in remove the sh from the file name in the desination)
# 5. To auto start on boot execute (once):
#       cd /etc/rc.d/init.d/; sudo chkconfig --add hangoutsbot
#    To stop auto start on boot execute
#       sudo chkconfig --del hangoutsbot
# 6. Once you have done that, hangoutsbot will start automatically at boot.
#    You can also start it manually by running
#       sudo /etc/rc.d/init.d/hangoutsbot start
#    Or stop it manually by running
#       sudo /etc/rc.d/init.d/hangoutsbot stop
#    Or restart it (to reload the configuration file) by running
#       sudo /etc/rc.d/init.d/hangoutsbot restart
#
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin/usr/local/bin:
DESC="hangoutsbot"
NAME=hangoutsbot
RUN_DIR=/var/run/$NAME
ETC_DIR=/etc/$NAME
CONF_FILE=$ETC_DIR/config.json
MAX_RETRIES=1000 # Keep retrying for a long time
DAEMON=/usr/bin/python3
DAEMON_ARGS="hangupsbot/hangupsbot.py --log /var/log/hangoutsbot.log --cookies $ETC_DIR/cookies.json --retries=$MAX_RETRIES --memory=$ETC_DIR/memory.json --config $ETC_DIR/config.json"
HOMEDIR=/home/pi/hangoutsbot # Edit if different on your Raspberry Pi
PIDFILE=$RUN_DIR/$NAME.pid
LOCKFILE=/var/lock/subsys/$NAME
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the DAEMON is not installed
[ -x "$DAEMON" ] || exit 0

# Source function library.
. /etc/init.d/functions

do_start()
{
    if test ! -d $RUN_DIR; then
      mkdir -p $RUN_DIR
    fi
    if test ! -f $CONF_FILE; then
      echo "No $NAME configuration file at $CONF_FILE. Refusting to start."
      return 2
    fi

    [ -x "$DAEMON" ] || return 1
    cd $HOMEDIR
    echo -n $"Starting $NAME: "
    $DAEMON $DAEMON_ARGS >/dev/null &
    sleep 1
    pgrep -f "$DAEMON $DAEMON_ARGS" >$PIDFILE
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      touch $LOCKFILE
      echo_success
      echo ""
    else
      rm -f $PIDFILE
      echo_failure
      echo ""
    fi
    return $RETVAL
}

do_stop()
{
        echo -n $"Shutting down $NAME: "
        killproc -p $PIDFILE $NAME
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ] ; then
          rm -f $LOCKFILE
          rm -f $PIDFILE
        fi
        return $RETVAL

                # Return
                #   0 if daemon has been stopped
                #   1 if daemon was already stopped
                #   2 if daemon could not be stopped
                #   other if a failure occurred
                #start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
                #RETVAL="$?"
                #[ "$RETVAL" = 2 ] && return 2
                # Wait for children to finish too if this is a daemon that forks
                # and if the daemon is only ever run from this initscript.
                # If the above conditions are not satisfied then add some other code
                # that waits for the process to drop all resources that could be
                # needed by services started subsequently.  A last resort is to
                # sleep for some time.
                #start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
                #[ "$?" = 2 ] && return 2
                # Many daemons don't delete their pidfiles when they exit.
                #rm -f $PIDFILE
                #return "$RETVAL"
}

case "$1" in
  start)
                do_start
                ;;
  stop)
                do_stop
                ;;
  status)
                status -p $PIDFILE -l $(basename $LOCKFILE) "$NAME" && exit 0 || exit $?
                ;;
  restart|force-reload)
                do_stop
                do_start
                ;;
  *)
                #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
                echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
                exit 3
                ;;
esac

:
